МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторної роботи №4
з курсу «Програмування комп’ютерної графіки»
на тему: «Тривимірні побудови. Буфер глибини. Видові параметри. Паралельна і перспективна проекції»
Виконав:ст. гр. УІ-31
Прийняла:
Львів – 2011
Мета роботи.
З'ясувати особливості тривимірного моделювання, побудови об'ємних зображень як проекцій на екранній плоскості; дати поняття про параметри вигляду.
Варіант 1
Текст програми
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.OpenGl;
using Tao.FreeGlut;
using Tao.Platform.Windows;
namespace GeometricTransformation
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// инициализациядляработыс openGL
AnT.InitializeContexts();
}
// массив вершин создаваемого геометрического объекта
private float[,] GeomObject = new float[32, 3];
// счеткикеговершин
private int count_elements = 0;
// событиезагрузкиформыокна
private void Form1_Load(object sender, EventArgs e)
{
// инициализация OpenGL, много раз комментированная ранее
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
Gl.glClearColor(255, 255, 255, 1);
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
Gl.glEnable(Gl.GL_DEPTH_TEST);
// пирамидадлявизуализации (4 точки)
GeomObject[0, 0] = 0;
GeomObject[0, 1] = 0.3f;
GeomObject[0, 2] = 0.2f;
GeomObject[1, 0] = 0.3f;
GeomObject[1, 1] = 0.3f;
GeomObject[1, 2] = 0;
GeomObject[2, 0] = 0f;
GeomObject[2, 1] = 0;
GeomObject[2, 2] = 0.7f;
GeomObject[3, 0] = 0.6f;
GeomObject[3, 1] = 0.7f;
GeomObject[3, 2] = 0.5f;
// количество вершин рассматриваемого геометричекого объекта
count_elements = 4;
// устанавливаем ось X по умолчанию
comboBox1.SelectedIndex = 0;
// начало визуализации (активируем таймер)
RenderTimer.Start();
}
// функцияотрисовки
private void Draw()
{
// очистка буфера цвета и буфера глубины
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glClearColor(255, 255, 255, 1);
// очищениетекущейматрицы
Gl.glLoadIdentity();
// утснаовка черного цвета
Gl.glColor3f(0, 0, 0);
// помещаем состояние матрицы в стек матриц
Gl.glPushMatrix();
// перемещаем камеру для более хорошего обзора объекта
Gl.glTranslated(0, 0, -7);
// поворачиваем ее на 30 градусов
Gl.glRotated(30, 1, 1, 0);
// помещаем состояние матрицы в стек матриц
Gl.glPushMatrix();
// начинаем отрисовку объекта
Gl.glBegin(Gl.GL_LINE_LOOP);
// геометрические данные ме бырем из массива GeomObject
// рисуем основание с помощью зацикленной линии
Gl.glVertex3d(GeomObject[0, 0], GeomObject[0, 1], GeomObject[0, 2]);
Gl.glVertex3d(GeomObject[1, 0], GeomObject[1, 1], GeomObject[1, 2]);
Gl.glVertex3d(GeomObject[2, 0], GeomObject[2, 1], GeomObject[2, 2]);
// завершаем отрисовку примитивов
Gl.glEnd();
// рисуем линии от вершин основания к вершине пирамиды
Gl.glBegin(Gl.GL_LINES);
Gl.glVertex3d(GeomObject[0, 0], GeomObject[0...